﻿#include<iostream>
#include<string>
using namespace std;

//double Divide(int a, int b)
//{
//	try
//	{
//		// 当b == 0时抛出异常
//		if (b == 0)
//		{
//			string s("Divide by zero condition!");
//			throw s;
//		}
//		else
//		{
//			return ((double)a / (double)b);
//		}
//	}
//	catch (int errid)
//	{
//		cout << errid << endl;
//	}
//	return 0;
//}
//void Func()
//{
//	int len, time;
//	cin >> len >> time;
//	try
//	{
//		cout << Divide(len, time) << endl;
//	}
//	catch (const char* errmsg)
//	{
//		cout << errmsg << endl;
//	}
//	cout << __FUNCTION__ << ":" << __LINE__ << "行执行" << endl;
//}
//int main()
//{
//	while (1)
//	{
//		try
//		{
//			Func();
//		}
//		catch (const string& errmsg)
//		{
//			cout << errmsg << endl;
//		}
//	}
//	return 0;
//}
#include<functional>
//namespace wc {
//	template<class T>
//	class shared_ptr {
//	public:
//		shared_ptr (T* ptr)
//			:_ptr(ptr)
//			,_pcount(new int(1))
//		{ }
//		template<class D>
//		shared_ptr(T* ptr = nullptr, D del)
//			: _ptr(ptr)
//			, _pcount(new int(1))
//			,_del(del)
//		{
//		}
//		shared_ptr(const shared_ptr<T>& sp) 
//			:_ptr(sp._ptr)
//			,_pcount(sp._pcount)
//		{
//			++(*_pcount);
//		}
//		~shared_ptr() {
//			if (--(*_pcount) == 0) {
//				delete _ptr;
//				_del(_ptr);
//				delete _pcount;
//			}
//		}
//		void release()
//		{
//			if (--(*_pcount) == 0)
//			{
//				// 最后⼀个管理的对象，释放资源
//				_del(_ptr);
//				delete _pcount;
//				/*_ptr = nullptr;
//				_pcount = nullptr;*/
//			}
//		}
//		shared_ptr<T>& operator=(const shared_ptr<T>& sp)
//		{
//			if (_ptr != sp._ptr)
//			{
//				release();
//				_ptr = sp._ptr;
//				_pcount = sp._pcount;
//				++(*_pcount);
//			}
//			return *this;
//		}
//	private:
//		T* _ptr;
//		int* _pcount;
//		std::function<void(T*)> _del = [](T* ptr) {delete ptr; };
//	};
//	
//
//}
//class Date {
//public:
//	int y, m, d;
//};
//int main() {
//	wc::shared_ptr<Date> sp1(new Date);
//	wc::shared_ptr<Date> sp2(sp1);
//
//	wc::shared_ptr<Date> sp3(new Date);
//	return 0;
//}

struct ListNode {
	int _data;
	int* _next;
};

int main() {
	std::shared_ptr<ListNode> n1(new ListNode(1));
	std::shared_ptr<ListNode> n1(new ListNode(1));

	return 0;
}